package com.shm.city58;

import java.util.Deque;
import java.util.LinkedList;

/**
 * @author: shm
 * @dateTime: 2020/9/21 21:49
 * @description: 给定一个包含正整数、加(+)、减(-)、乘(*)、除(/)的算数表达式(括号除外)，计算其结果。
 *
 * 表达式仅包含非负整数，+， - ，*，/ 四种运算符和空格  。 整数除法仅保留整数部分。
 */
public class Solution {
    public int calculate(String s) {
        char[] chars = s.replaceAll(" ","").toCharArray();
        Deque<Integer> deque = new LinkedList<>();
        int res=0,i=0;
        while (i<chars.length){
            char temp = chars[i];
            if (temp=='+'||temp=='*'||temp=='/'||temp=='-'){
                i++;
            }
            int num = 0;
            //Character.isDigit() 方法用于判断指定字符是否为数字。
            while (i<chars.length&&Character.isDigit(chars[i])){
                num = num*10+chars[i]-'0';
                i++;
            }
            switch (temp){
                case '-':
                    num=-num;
                    break;
                case '*':
                    num=deque.pop()*num;
                    break;
                case '/':
                    num=deque.pop()/num;
                    break;
                default:
                    break;
            }
            deque.push(num);
        }
        while (!deque.isEmpty()){
            res+=deque.pop();
        }
        return res;
    }
}
